#pragma once

#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
//这是一个工具类，要设置为静态的，用于行读取行处理


class Util{
  public:
    static int ReadLine(int sock,std::string &out)
    {
      char ch ='X';
      while(ch !='\n')
      {
        ssize_t s =recv(sock,&ch,1,0);//从套接字缓冲区一个一个读取到ch
        if(s>0){
          if(ch=='\r'){
            recv(sock,&ch,1,MSG_PEEK);//窥探，不读取，看是\r\n还是\r
            if(ch=='\n')
            {
              recv(sock,&ch,1,0);
            }
            else{
              ch='\n';//这里窥探失败，不用两个字符去替换
            }
          }
        out.push_back(ch);//一直读取单字符到out

        }
        else if(s==0)
        {
          return 0;//套接字无内容
        }

        else{
          return -1;
        }
      }
      return  out.size();//返回读取了多少字节
    }

    static bool CutString(const std::string &target,std::string &sub1_out, std::string &sub2_out,std::string sep)
    {
      //string 类里面的切分。find找到对应的字符
      size_t pos =target.find(sep);
      if(pos!=std::string::npos)
      {
        sub1_out =target.substr(0,pos);
        sub2_out = target.substr(pos+sep.size());
        return true;
      }
      return false;
    }

};
